home *** CD-ROM | disk | FTP | other *** search
- global gPlayer, gCurrTrack, gFinalRankings, geEnemyList, geDestPoints
-
- on e_Init
- geEnemyList = []
- geDestPoints = [[point(993, 715), point(1057, 666), point(1055, 593), point(656, 388), point(473, 379), point(370, 394), point(345, 304), point(411, 270), point(977, 269), point(1016, 316), point(883, 369), point(766, 569), point(669, 595), point(454, 517), point(342, 581), point(353, 690), point(520, 726)], [point(418, 740), point(349, 674), point(352, 311), point(437, 261), point(528, 275), point(918, 611), point(984, 714), point(1034, 676), point(1036, 332), point(985, 265), point(902, 269), point(561, 611)], [point(429, 432), point(407, 355), point(507, 267), point(613, 339), point(621, 615), point(562, 646), point(506, 618), point(471, 539), point(350, 542), point(321, 631), point(398, 729), point(938, 730), point(1013, 657), point(1020, 302), point(986, 266), point(803, 266), point(753, 303), point(761, 582), point(848, 646), point(925, 550), point(919, 460), point(663, 442)]]
- end
-
- on e_CreateEnemy theSpriteNum, theCarType, startLoc, state, special, aTimer
- sprite(theSpriteNum).rotation = 270
- theEnemy = [theSpriteNum, theCarType, startLoc, state, special, aTimer, 0, 1, 0.0, 1, 1, [], 0]
- return theEnemy
- end
-
- on e_AddEnemy theEnemy
- add(geEnemyList, theEnemy)
- myEnemyNum = count(geEnemyList)
- geEnemyList[myEnemyNum][7] = p_RegisterObject([theEnemy[3], point(0, 0), 14, 100.0, theEnemy[1]])
- sprite(geEnemyList[myEnemyNum][1]).member = member(string(geEnemyList[myEnemyNum][2].carType))
- end
-
- on e_SetStartRotations theRotation
- repeat with n = 1 to count(geEnemyList)
- sprite(geEnemyList[n][1]).rotation = theRotation
- end repeat
- end
-
- on e_Update theOffset
- repeat with n = 1 to count(geEnemyList)
- case geEnemyList[n][4] of
- #normal:
- e_updateNormal(n)
- #crash:
- e_updateCrash(n)
- #inAir:
- e_updateInAir(n)
- end case
- sprite(geEnemyList[n][1]).loc = geEnemyList[n][3] - theOffset
- if geEnemyList[n][13] = 0 then
- checkPointCheck(n)
- end if
- p_UpdateObject(geEnemyList[n][7], geEnemyList[n][3], point(0, 0))
- end repeat
- end
-
- on e_updateNormal enemyNum
- theSpriteNum = geEnemyList[enemyNum][1]
- destPoint = geDestPoints[gCurrTrack][geEnemyList[enemyNum][8]]
- e_rotateTowards(theSpriteNum, geEnemyList[enemyNum][3], destPoint, geEnemyList[enemyNum][2].cornering + 4, enemyNum)
- if not geEnemyList[enemyNum][13] then
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][9] + geEnemyList[enemyNum][2].acceleration
- if geEnemyList[enemyNum][9] > (geEnemyList[enemyNum][2].speed + 1) then
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][2].speed
- end if
- else
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][9] * 0.97999999999999998
- end if
- radAngle = sprite(theSpriteNum).rotation * PI / 180
- diff = point(sin(radAngle), -cos(radAngle))
- diff = diff * geEnemyList[enemyNum][9]
- geEnemyList[enemyNum][3] = geEnemyList[enemyNum][3] + diff
- if hitPoint(geEnemyList[enemyNum][3], destPoint, 20) then
- geEnemyList[enemyNum][8] = geEnemyList[enemyNum][8] + 1
- if geEnemyList[enemyNum][8] > count(geDestPoints[gCurrTrack]) then
- geEnemyList[enemyNum][8] = 1
- end if
- end if
- terrainType = t_GroundCheck(geEnemyList[enemyNum][3])
- e_adjustForTerrain(enemyNum, terrainType)
- end
-
- on e_updateCrash enemyNum
- theSpriteNum = geEnemyList[enemyNum][1]
- destPoint = geDestPoints[gCurrTrack][geEnemyList[enemyNum][8]]
- e_rotateTowards(theSpriteNum, geEnemyList[enemyNum][3], destPoint, geEnemyList[enemyNum][2].cornering, enemyNum)
- geEnemyList[enemyNum][3] = geEnemyList[enemyNum][3] + geEnemyList[enemyNum][5]
- geEnemyList[enemyNum][5] = geEnemyList[enemyNum][5] * 0.94999999999999996
- p_UpdateObject(geEnemyList[enemyNum][7], geEnemyList[enemyNum][3], geEnemyList[enemyNum][5])
- if the ticks > geEnemyList[enemyNum][6] then
- geEnemyList[enemyNum][4] = #normal
- end if
- end
-
- on e_updateInAir enemyNum
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][9] + geEnemyList[enemyNum][2].acceleration
- if geEnemyList[enemyNum][9] > geEnemyList[enemyNum][2].speed then
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][2].speed
- end if
- radAngle = sprite(geEnemyList[enemyNum][1]).rotation * PI / 180
- diff = point(sin(radAngle), -cos(radAngle))
- diff = diff * geEnemyList[enemyNum][9]
- geEnemyList[enemyNum][3] = geEnemyList[enemyNum][3] + diff
- destPoint = geDestPoints[gCurrTrack][geEnemyList[enemyNum][8]]
- if hitPoint(geEnemyList[enemyNum][3], destPoint, 20) then
- geEnemyList[enemyNum][8] = geEnemyList[enemyNum][8] + 1
- if geEnemyList[enemyNum][8] > count(geDestPoints[gCurrTrack]) then
- geEnemyList[enemyNum][8] = 1
- end if
- end if
- sprite(geEnemyList[enemyNum][1]).width = sprite(geEnemyList[enemyNum][1]).width + geEnemyList[enemyNum][5].inAirDimMod
- sprite(geEnemyList[enemyNum][1]).height = sprite(geEnemyList[enemyNum][1]).height + geEnemyList[enemyNum][5].inAirDimMod
- if abs(geEnemyList[enemyNum][5].inAirDimMod) = 2.10000000000000009 then
- maxWidth = 10
- else
- maxWidth = 15
- end if
- if (sprite(geEnemyList[enemyNum][1]).width > (geEnemyList[enemyNum][5].origDims[1] + maxWidth)) and (geEnemyList[enemyNum][5].inAirDimMod > 0) then
- geEnemyList[enemyNum][5].inAirDimMod = -geEnemyList[enemyNum][5].inAirDimMod
- end if
- if sprite(geEnemyList[enemyNum][1]).width <= geEnemyList[enemyNum][5].origDims[1] then
- geEnemyList[enemyNum][4] = #normal
- sprite(geEnemyList[enemyNum][1]).width = geEnemyList[enemyNum][5].origDims[1]
- sprite(geEnemyList[enemyNum][1]).height = geEnemyList[enemyNum][5].origDims[2]
- end if
- end
-
- on e_Crash theSpriteNum, crashVel
- enemyNum = e_findEnemyFromSpriteNum(theSpriteNum)
- if enemyNum = 0 then
- return
- end if
- if geEnemyList[enemyNum][4] = #normal then
- geEnemyList[enemyNum][3] = geEnemyList[enemyNum][3] + crashVel
- geEnemyList[enemyNum][4] = #crash
- if p_GetDistance(point(0, 0), crashVel) < 0.5 then
- geEnemyList[enemyNum][4] = #normal
- else
- geEnemyList[enemyNum][5] = crashVel.duplicate()
- end if
- geEnemyList[enemyNum][6] = the ticks + random(12) + 12
- end if
- end
-
- on e_findEnemyFromSpriteNum theSpriteNum
- repeat with n = 1 to count(geEnemyList)
- if geEnemyList[n][1] = theSpriteNum then
- return n
- end if
- end repeat
- return 0
- end
-
- on e_rotateTowards theSpriteNum, ourLocation, thePoint, amount, enemyNum
- theAngle = getAngle(ourLocation, thePoint)
- if sprite(theSpriteNum).rotation > (theAngle + 180) then
- sprite(theSpriteNum).rotation = sprite(theSpriteNum).rotation - 360
- end if
- if abs(sprite(theSpriteNum).rotation + 360 - theAngle) < abs(sprite(theSpriteNum).rotation - theAngle) then
- sprite(theSpriteNum).rotation = sprite(theSpriteNum).rotation + 360
- end if
- if (abs(sprite(theSpriteNum).rotation - theAngle) > 40) and (geEnemyList[enemyNum][9] > 3.0) then
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][9] - 1
- end if
- if sprite(theSpriteNum).rotation < (theAngle - amount) then
- sprite(theSpriteNum).rotation = sprite(theSpriteNum).rotation + amount
- else
- if sprite(theSpriteNum).rotation > (theAngle + amount) then
- sprite(theSpriteNum).rotation = sprite(theSpriteNum).rotation - amount
- end if
- end if
- end
-
- on e_adjustForTerrain enemyNum, terrainType
- case terrainType of
- #track:
- nothing()
- #grass:
- if geEnemyList[enemyNum][9] > (geEnemyList[enemyNum][2].speed / 2.5) then
- geEnemyList[enemyNum][9] = geEnemyList[enemyNum][2].speed / 2.5
- if geEnemyList[enemyNum][9] > 0.0 then
- gfx_CreateEffect(#smoke, geEnemyList[enemyNum][3], 120, gPlayer.pLocation, 0, geEnemyList[enemyNum][1], 1)
- end if
- end if
- #mediumRamp:
- geEnemyList[enemyNum][4] = #inAir
- geEnemyList[enemyNum][5] = [#inAirDimMod: 2, #origDims: [sprite(geEnemyList[enemyNum][1]).member.width, sprite(geEnemyList[enemyNum][1]).member.height]]
- #bigRamp:
- geEnemyList[enemyNum][4] = #inAir
- geEnemyList[enemyNum][5] = [#inAirDimMod: 1, #origDims: [sprite(geEnemyList[enemyNum][1]).member.width, sprite(geEnemyList[enemyNum][1]).member.height]]
- #inpassible:
- #smallRamp:
- geEnemyList[enemyNum][4] = #inAir
- geEnemyList[enemyNum][5] = [#inAirDimMod: 2.10000000000000009, #origDims: [sprite(geEnemyList[enemyNum][1]).member.width, sprite(geEnemyList[enemyNum][1]).member.height]]
- end case
- end
-
- on checkPointCheck enemyNum
- pCheckPoints = gPlayer.pCheckPoints[gCurrTrack]
- if hitPoint(geEnemyList[enemyNum][3], pCheckPoints[geEnemyList[enemyNum][10]], 100) then
- geEnemyList[enemyNum][10] = geEnemyList[enemyNum][10] + 1
- if geEnemyList[enemyNum][10] > count(pCheckPoints) then
- geEnemyList[enemyNum][11] = geEnemyList[enemyNum][11] + 1
- add(geEnemyList[enemyNum][12], getTime())
- geEnemyList[enemyNum][10] = 1
- if geEnemyList[enemyNum][11] = 4 then
- geEnemyList[enemyNum][13] = 1
- add(gFinalRankings, geEnemyList[enemyNum][1])
- end if
- end if
- end if
- end
-